home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / smb_login.nasl < prev    next >
Text File  |  2005-01-14  |  7KB  |  335 lines

  1. #
  2. # This script was written by Renaud Deraison <deraison@cvs.nessus.org>
  3. #
  4. #
  5. # See the Nessus Scripts License for details
  6. #
  7. #
  8.  
  9. if(description)
  10. {
  11.  script_id(10394);
  12.  script_bugtraq_id(494, 990, 11199);
  13.  script_version ("$Revision: 1.63 $");
  14.  script_cve_id("CAN-1999-0504", "CAN-1999-0506", "CVE-2000-0222", "CAN-1999-0505", "CAN-2002-1117");
  15.  name["english"] = "SMB log in";
  16.  name["francais"] = "Login SMB";
  17.  
  18.  script_name(english:name["english"],
  19.           francais:name["francais"]);
  20.  
  21.  desc["english"] = "
  22. This script attempts to log into the remote host
  23. using several login/password combinations.
  24.  
  25. Reference : http://support.microsoft.com/support/kb/articles/Q143/4/74.ASP
  26. Reference : http://support.microsoft.com/support/kb/articles/Q246/2/61.ASP
  27.  
  28. Risk factor : Medium";
  29.  
  30.  desc["francais"] = "
  31. Ce script tente de se connecter sur l'hote distant
  32. en utilisant plusieurs combinaisons de login/password
  33. usuelles";
  34.  
  35.  script_description(english:desc["english"],
  36.              francais:desc["francais"]);
  37.  
  38.  summary["english"] = "Attempts to log into the remote host";
  39.  summary["francais"] = "Essaye de se logguer dans l'hote distant";
  40.  script_summary(english:summary["english"],
  41.          francais:summary["francais"]);
  42.  
  43.  script_category(ACT_GATHER_INFO);
  44.  
  45.  script_copyright(english:"This script is Copyright (C) 2000 Renaud Deraison");
  46.  family["english"] = "Windows";
  47.  script_family(english:family["english"]);
  48.  
  49.  script_dependencies("netbios_name_get.nasl", "cifs445.nasl", "find_service.nes", "logins.nasl");
  50.  script_require_keys("SMB/name", "SMB/transport");
  51.  script_require_ports(139, 445);
  52.  exit(0);
  53. }
  54.  
  55. include("smb_nt.inc");
  56. port = kb_smb_transport();
  57. if(!port)port = 139;
  58.  
  59.  
  60.  
  61. function login(lg, pw, dom)
  62.  _ret = 0;
  63.  soc = open_sock_tcp(port);
  64.  if(!soc)exit(0);
  65.  
  66.   #
  67.   # Request the session
  68.   # 
  69.   r = smb_session_request(soc:soc,  remote:name);
  70.   if(r)
  71.   {
  72.   #
  73.   # Negociate the protocol
  74.   #
  75.   prot = smb_neg_prot(soc:soc);
  76.   if(prot)
  77.   {
  78.   r = smb_session_setup(soc:soc, login:lg, password:pw, domain:dom, prot:prot);
  79.   if(r)
  80.   {
  81.     uid = session_extract_uid(reply:r);
  82.     r = smb_tconx(soc:soc, name:name, uid:uid, share:"IPC$");
  83.     if(r)tid = tconx_extract_tid(reply:r);
  84.     else tid = 0;
  85.     _ret = 1;
  86.     if(!tid)v[count] =  1;
  87.     else v[count] = 2;
  88.     
  89.      if(!g_uid){
  90.          g_index = count;
  91.          g_uid = 1;
  92.     }
  93.  
  94.     # we take the login/pass that gives us access to IPC$        
  95.      if(!g_tid){
  96.          if(tid)
  97.     {
  98.           g_index = count;
  99.      g_uid = 1;
  100.      g_tid = 1;
  101.      }
  102.     }    
  103.    }
  104.   }
  105.   }
  106.   close(soc);
  107.   return(_ret);
  108. }
  109. #----------------------------------------------------------------#
  110. #               main()                                 #
  111. #----------------------------------------------------------------#        
  112.  
  113.  
  114.  
  115. name = kb_smb_name();
  116. if(!name)name = "*SMBSERVER";
  117.  
  118. if(!get_port_state(port))exit(0);
  119.  
  120. user_login =  string(get_kb_item("SMB/login_filled"));
  121. user_password = string(get_kb_item("SMB/password_filled"));
  122. if(!strlen(user_password))user_password = "";
  123. user_domain = string(get_kb_item("SMB/domain_filled"));
  124.  
  125.  
  126. if(strlen(user_domain))
  127.  smb_domain = user_domain;
  128. }
  129. else
  130. {
  131.  if(!user_domain)user_domain = "";
  132.  soc = open_sock_tcp(port);
  133.  if(!soc)exit(0);
  134.  smb_session_request(soc:soc,  remote:name);
  135.  prot = smb_neg_prot(soc:soc);
  136.  close(soc);
  137.  smb_domain = smb_neg_prot_domain(prot:prot);
  138.  if(!smb_domain)smb_domain = string(get_kb_item("SMB/workgroup"));
  139.  if(!smb_domain)smb_domain = NULL;
  140. }
  141.  
  142.  
  143. IN_DOMAIN = 2;
  144. IN_HOST   = 1;
  145.  
  146. l[0] = "administrator";
  147. p[0] = "";
  148. h[0] = 0;
  149. v[0] = 0;
  150.  
  151. l[1] = "administrator";
  152. p[1] = "administrator";
  153. h[1] = 0;
  154. v[1] = 0;
  155.  
  156. l[2] = "guest";
  157. p[2] = "";
  158. h[2] = 0;
  159. v[2] = 0;
  160.  
  161. l[3] = "guest";
  162. p[3] = "guest";
  163. h[3] = 0;
  164. v[3] = 0;
  165.  
  166.  
  167.  
  168. l[4] = "";
  169. p[4] = "whatever";
  170. h[4] = 0;
  171. v[4] = 0;
  172.  
  173. l[5] = "nessus" + string(rand());
  174. p[5] = "nessus" + string(rand());
  175. h[5] = 0;
  176. v[5] = 0;
  177.  
  178. l[6] = "";
  179. p[6] = "";
  180. h[6] = 0;
  181. v[6] = 0;
  182.  
  183. l[7] = "*";
  184. p[7] = "";
  185. h[7] = 0;
  186. v[7] = 0;
  187.  
  188. l[8] = "pcguest";
  189. p[8] = "";
  190. h[8] = 0;
  191. v[8] = 0;
  192.  
  193.  
  194. l[9] = user_login;
  195. p[9] = user_password;
  196. h[9] =  0;
  197. v[9] = 0;
  198.  
  199. g_index = 0;
  200. g_uid = 0;
  201. g_tid = 0;
  202.  
  203. IN_HOST = 1;
  204. IN_DOMAIN = 2;
  205.  
  206. for(count=0;count<10;count=count+1)
  207. {
  208.   if(smb_domain)
  209.   {
  210.   if(login(lg:l[count], pw:p[count], dom:smb_domain))
  211.       a = IN_DOMAIN;
  212.   else
  213.       a = 0;
  214.   } 
  215.   else a = 0;
  216.     
  217.   if(login(lg:l[count], pw:p[count], dom:""))
  218.       b = IN_HOST;
  219.   else
  220.       b = 0;
  221.   h[count] = a|b;
  222.   if ( a|b && ( count <= 1 ) ) this_is_serious = TRUE;
  223. }
  224.  
  225. count = 0;
  226. report = string("It was possible to log into the remote host using the following\n",
  227.  "login/password combinations :\n");
  228.  
  229. for(i=0;i<4;i=i+1)
  230. {
  231.  if(v[i])
  232.  {
  233.   report = report + string("       '", l[i], "'", "/'", p[i], "'\n");
  234.   count = count + 1;
  235.  }
  236. }
  237.  
  238.  
  239. null_session_level = v[4];
  240. if(!null_session_level)null_session_level = v[6];
  241. if(!null_session_level)null_session_level = v[7];
  242.  
  243. if(null_session_level > 1)
  244. {info = string("\n",
  245. "It was possible to log into the remote host using a NULL session.\n",
  246. "The concept of a NULL session is to provide a null username and\n",
  247. "a null password, which grants the user the 'guest' access\n\n",
  248. "To prevent null sessions, see MS KB Article Q143474 (NT 4.0) and\n",
  249. "Q246261 (Windows 2000). \n",
  250. "Note that this won't completely disable null sessions, but will \n",
  251. "prevent them from connecting to IPC$\n",
  252. "Please see http://msgs.securepoint.com/cgi-bin/get/nessus-0204/50/1.html\n");
  253.  
  254.  
  255. if(count)report = report + info;
  256. else report = info;
  257. }
  258. else
  259. {
  260.  if(null_session_level)
  261.  {
  262.   info = string("\n",
  263. "It was possible to log into the remote host using a NULL session,\n",
  264. "but the IPC$ share could not be connected to, which makes this problem\n",
  265. "rather harmless.\n\n",
  266. "The concept of a NULL session is to provide a null username and\n",
  267. "a null password, which grants the user the 'guest' access\n\n",
  268. "There is no solution to disable null sessions completely\n");
  269.  
  270.  
  271. if(count)report = report + info;
  272. else report = info;
  273.  }
  274. }
  275.  
  276. if(v[5])
  277. {
  278.  any_login = 1;
  279.  set_kb_item(name:"SMB/any_login", value:TRUE);
  280.  info = string("\n",
  281.  "The remote host defaults to guest when a user logs in using an invalid\n",
  282.  "login. For instance, we could log in using the account 'nessus/nessus'\n");
  283.  
  284.  if(count)report = report + info;
  285.  else if(v[4] || v[6] || v[7])report = report + info;
  286.  else report = info;
  287. }
  288.  
  289. if(g_uid)
  290. {
  291.  if(strlen(user_login) && h[9] != 0)
  292.  {
  293.   if(v[9])
  294.   {
  295.   l[g_index] = user_login;
  296.   p[g_index] = user_password;
  297.   h[g_index] = h[9];
  298.   }
  299.  }
  300.  
  301.  
  302.  set_kb_item(name:"SMB/login", value:l[g_index]);
  303.  set_kb_item(name:"SMB/password", value:p[g_index]);
  304.  
  305.  if(h[g_index] & IN_DOMAIN)
  306.  {
  307.   set_kb_item(name:"SMB/domain", value:smb_domain);
  308.  }
  309.  
  310.  if(strlen(user_login))
  311.  {
  312.   if(v[9])
  313.   {
  314.   p[g_index]="****";
  315.   }
  316.  }
  317.  report = report + string("\n\nAll the smb tests will be done as '", l[g_index], "'/'",
  318.        p[g_index], "'");
  319.  if(h[g_index] & IN_DOMAIN)
  320.  {
  321.   report = report + string(" in domain ", smb_domain);
  322.  }    
  323.    
  324.  if(!this_is_serious && (l[g_index] == "" || any_login != 0 || l[g_index] == user_login) )
  325.    {
  326.        security_note(port:port, data:report);
  327.    }
  328.  else
  329.    security_warning(port:port, data:report);
  330.  
  331. }
  332.  
  333.